/**************************************************************/
/*                                                            */
/*     MC823 - Laboratorio de Teleprocessamento e Redes       */
/*     1 Semestre / 2013                                      */
/*     Projeto 1 - Cliente e Servidor RMI de uma Livraria     */
/*                                                            */
/*     Alunos: Joao Gabriel M.D.Mendes - RA 102788            */
/*             Lucas Domingues Lima    - RA 103140            */
/*                                                            */
/**************************************************************/

/* Arquivo: livraria/rmi/src/t_estoque.java
   Definicao: Classe t_estoque, que contem as informacoes sobre
   			  os livros e implementa as requisicoes feitas pelo
   			  pelo cliente e recebidas pelo servidor.
*/

package livraria.rmi;

import java.util.Scanner;
import java.io.*;

public class t_estoque {
	//o estoque em si
	private t_livro[] livros;
	private static String estoque_path = "../estoqueinicial.txt";
	//tamanhos maximo e corrente do estoque
	private static int max_size = 20;
	private int size;
	
	public t_estoque() {
		//construtor le informacoes do arquivo de estoque inicial
		//e armazena de forma conveniente no vetor de objetos.
		try {
			//abre arquivo para leitura
			Scanner in = new Scanner(new FileReader(estoque_path));
			//inicializa atributo de estoque
			this.livros = new t_livro[max_size];
			int i = 0;
			
			//enquanto houver mais uma linha a ser lida...
			while(in.hasNextLine()) {
				String ISBN = in.nextLine();
				String title = in.nextLine();
				String autor = in.nextLine();
				String descricao = in.nextLine();
				String editora = in.nextLine();
				String ano = in.nextLine();
				String num = in.nextLine();
				//cria mais um t_livro e armazena no vetor com as informacoes
				//lidas
				livros[i] = new t_livro(ISBN,title,autor,descricao,
										editora,ano,Integer.parseInt(num));
				i++;
			}
			this.size = i;
			in.close();
		}catch (Exception e) {
			System.err.println("t_estoque exception: " + e.toString());
			e.printStackTrace();
		}
	}

// -------- FUNCOES PRINCIPAIS QUE EXECUTAM AS REQUISICOES ------------

/* Funcao que atende a solicitacao 0, de retornar o titulo dos livros no
   estoque e seus ISBNs.*/
	public String retornaTitulosISBN() {
		int i;
		String response = "";
		//passa de livro em livro do estoque, coletando ISBN e titulo
		//e concatenando na string de resposta
		for(i=0;i<size;i++) {
			String ISBN = this.livros[i].get_ISBN();
			String title = this.livros[i].get_titulo();
			response = response+ISBN+":"+title+" | ";
		}
		return response;
	}
/* Funcao que atende a solicitacao 1, de retornar todas as informacoes dos
   livros no estoque.*/
    public String retornaInfoEstoque() {
    	int i;
    	String response = "";
    	//passa livro por livro do estoque, coletando todas as informacoes
    	//e concatenando na string de resposta.
    	for(i=0;i<size;i++) {
    		String ISBN = this.livros[i].get_ISBN();
    		String title = this.livros[i].get_titulo();
    		String autor = this.livros[i].get_autor();
    		String descricao = this.livros[i].get_descricao();
    		String editora = this.livros[i].get_editora();
    		String ano = this.livros[i].get_ano();
    		int num = this.livros[i].get_num();
    		String livro = ISBN+"|"+title+"|"+autor+"|"+
    						descricao+"|"+editora+"|"+ano+"|"+
    						Integer.toString(num)+"\n";
    		response = response+livro;
    	}
    	return response;
    }
/* Funcao que atende a solicitacao 2, de retornar a descricao de um livro
   especifico no estoque, dado o seu ISBN.*/
    public String retornaDescricao(String ISBN) {
    	int i;
    	String response = "";
    	//passa livro por livro ate encontrar um que tenha o ISBN
    	//requerido, e coleta a descricao dele. Se nao encontrar nenhum,
    	//retorna mensagem de erro.
    	for(i=0;i<size;i++) {
    		if(this.livros[i].get_ISBN().equals(ISBN)) {
    			response =  this.livros[i].get_descricao();
    			break;
    		}
    	}
    	if(response == "") return "ISBN nao encontrado.";
    	return response;
    }
/* Funcao que atende a solicitacao 3, de retornar todas as informacoes de 
   um livro dado o seu ISBN.*/    
    public String retornaInfoLivro(String ISBN) {
    	int i;
    	String response = "";
    	//idem a anterior, mas agora com todas as informacoes.
    	for(i=0;i<size;i++) {
    		if(this.livros[i].get_ISBN().equals(ISBN)) {
    			String title = this.livros[i].get_titulo();
    			String autor = this.livros[i].get_autor();
				String descricao = this.livros[i].get_descricao();
				String editora = this.livros[i].get_editora();
				String ano = this.livros[i].get_ano();
				int num = this.livros[i].get_num();
				response = ISBN+"|"+title+"|"+autor+"|"+
								descricao+"|"+editora+"|"+ano+"|"+
								Integer.toString(num);
    			break;
    		}
    	}
    	if(response == "") return "ISBN nao encontrado.";
    	return response;
    }
/* Funcao que atende a solicitacao 4, de retornar o numero em estoque
    de um dado livro, com base em seu ISBN.*/    
	public String retornaNumLivro(String ISBN) {
		int i;
    	String response = "";
    	//idem a anterior, agora somente com o numero de exemplares
    	//em estoque.
    	for(i=0;i<size;i++) {
    		if(this.livros[i].get_ISBN().equals(ISBN)) {
    			response =  Integer.toString(this.livros[i].get_num());
    			break;
    		}
    	}
    	if(response == "") return "ISBN nao encontrado.";
    	return response;
	}
/* Funcao que atende a solicitacao 5, de alterar o numero de exemplares
	em estoque de um dado livro com respectivo ISBN. Nao e feita
	verificacao do tipo de usuario aqui. Verificacao e feita na classe
	Server.java.*/
	public String alteraEstoque(String ISBN, int num) {
		int i;
    	String response = "";
    	//encontra livro do estoque com mesmo ISBN da requisicao
    	//e chama funcao para alterar seu numero de exemplares
    	//em estoque. Se nao encontrar, retorna mensagem de erro.
    	for(i=0;i<size;i++) {
    		if(this.livros[i].get_ISBN().equals(ISBN)) {
    			response =  this.livros[i].set_num(num);
    			break;
    		}
    	}
    	if(response == "") return "ISBN nao encontrado.";
    	return response;
	}
	
}